package com.wn.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

public class JWTUtils {
//    默认的过期时间 5分钟
    public static final long EXPERING_TIME = 50*60*1000;

    //生成token字符串
    public static String sign(String username,String password){
        //通过签名算法，增加解密难度 类似对woniuxy签名加密后 在放进去 排除woniuxy和woniu都可以解析token的情况
        Algorithm algorithm = Algorithm.HMAC256(password);
        //配置一个过期时间
        Date expering_time = new Date(System.currentTimeMillis() + EXPERING_TIME);
        String token = JWT.create().withClaim("username", username)
                .withSubject(username)
                //过期时间
                .withExpiresAt(expering_time)
                .sign(algorithm);
        return token;
    }

//检验token是否正确
    public static boolean verify(String token,String username,String password){
        //通过签名算法，增加解密难度 类似对woniuxy签名加密后 在放进去 排除woniuxy和woniu都可以解析token的情况
        Algorithm algorithm = Algorithm.HMAC256(password);
        //重新计算加密比较来进行校验两个Token是否一样
        JWTVerifier jwtVerifier = JWT.require(algorithm)
                .withClaim("username",username)
                .withSubject(username).build();
        jwtVerifier.verify(token);
        return true;
    }

    //从token中取出claim自定义属性 获取username
    public static String getUsername(String token){
        DecodedJWT decode = JWT.decode(token);
        //还可以选择使用这个来获取用户名
//        decode.getSubject();
       return decode.getSubject();
    }
}
